package com.qst.loginapplication.slice;

import com.google.gson.Gson;
import com.qst.loginapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Checkbox;
import ohos.agp.components.TextField;
import ohos.data.DatabaseHelper;
import ohos.data.preferences.Preferences;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import okhttp3.*;

import java.io.IOException;
import java.util.Date;

public class MainAbilitySlice extends AbilitySlice {
    private static final String TAG = MainAbilitySlice.class.getSimpleName();
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG);
//    用户名输入框
    TextField tfUsername;
//    密码输入框
    TextField tfPassword;
//    登录按钮
    Button btn;
//    记住密码选择框
    Checkbox ckbox;
//    当前记住密码选择框勾选状态
    Boolean remember;
//    Preference实例
    Preferences preference;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //    1.1请在此处填写 “记住密码”功能实现部分中的初始化用户名输入框、密码输入框、登录按钮输入框、记住密码复选框组件
        tfUsername = findComponentById(ResourceTable.Id_username);
        tfPassword = findComponentById(ResourceTable.Id_password);
        btn = findComponentById(ResourceTable.Id_btn_login);
        ckbox = findComponentById(ResourceTable.Id_check_box);


        getPreference();
        initUserMessage();
        //    1.4请在此处填写 “记住密码”功能实现部分中的为“记住密码”复选框设置状态改变回调事件（setCheckedStateChangedListener），当状态改变时，修改记住密码变量的状态，并通过Preference对象对记住密码状态进行持久化
        ckbox.setCheckedStateChangedListener((component, state) -> {
            chengeCheckStatus(state);
            // 状态改变的逻辑
        });
        btn.setClickedListener(e->{
            //    2.1请在此处填写“登录”功能实现部分中的获取用户账号和密码信息
            String username=tfUsername.getText();
            String password=tfPassword.getText();
            persistingUserData(username,password);

//            创建请求体
            String json = getJson(username,password);
            //    2.2请在此处填写“登录”功能实现部分中创建OkHttpClient实例和RequestBody实例
            OkHttpClient client = new OkHttpClient();
            RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
            //    2.3请在此处填写“登录”功能实现部分中创建Request实例
            Request request = new Request.Builder()
                                .url("http://www.api.example.com/login")
                                .method("POST",body)
                                .build();
            //    2.4请在此处填写“登录”功能实现部分中通过OkHttpClient发送Http请求，并通过HiLog.info(LABEL_LOG, string)打印响应数据
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {

                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
//                    获取响应数据，如果是success则调用成功登录方法，否则调用失败登录方法
                    String string = response.body().string();
                    HiLog.info(LABEL_LOG, string);
                }
            });

        });
    }

    private void chengeCheckStatus(boolean state) {
        remember=state;
        preference.putBoolean("remember",state);
//            持久化到文件
        preference.flush();
    }
    private void persistingUserData(String username,String password){
        if (remember) {
            preference.putString("username",username);
            preference.putString("password",password);
            preference.flush();
        }
    }
    private void initUserMessage() {
        //    1.3请在此处填写 “记住密码”功能实现部分中的中通过Preference获取“记住密码”的状态，如果该状态为true，则通过Preference获取用户账号和密码，并展示在界面中
//        判断是否记住密码
        remember = preference.getBoolean("remember",false);
        if(remember){
//            获取用户名和密码
            String username = preference.getString("username","");
            String password = preference.getString("password","");
//            如果非空，则加载到界面中
            if(!username.equals("")&&!password.equals("")){
                tfUsername.setText(username);
                tfPassword.setText(password);
            }
        }
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
    //初始化Preference
    void getPreference(){
        //    1.2请在此处填写 “记住密码”功能实现部分中的初始化Preference对象
        DatabaseHelper databaseHelper =new DatabaseHelper(this);
        preference = databaseHelper.getPreferences("login");


    }
    String getJson(String username,String password){
        return "{\n" +
                "    \"username\":\""+username+"\",\n" +
                "    \"password\":\""+password+"\"\n" +
                "}";
    }
}
